• mynote markdown
  • commits
  • 剪贴板图片
  • 图片上传
  • 图片fetch 外网转存
  • markdown todo
  • test cases
  • editor.md 当前使用;based on marked;已经停止维护
  • markdown test expmt 格式测试
  • parse markdown
  • 表情 emoji
  • code ana
  • marked core base
  • basic
  • heading
  • 如何实现markdown文章标题导航 双向
  • code ana
  • demo.html
  • commits
  • CommonMark compliance
  • mynote markdown
    markdown sum 

    commits

    SHA-1: 86d6c2ad63680b462762b098ef8898a179ad6d00
    * save后通知workman更新文章索引
    SHA-1: 6d401ec0b4b3f2d9cd39ecc463317b3c2692201e
    * git路径传入save.sh,并且捕获错误输出

    剪贴板图片

    Editor.insertValue(img_str);
    lv1= lv2= type=

    图片上传

    http://{{host}}/api/markdown/uploadpic
    SHA-1: 21bc3e3cd130c39d831939a00f1cda9c5818331c
    * 图片上传class,copy from basic\web\link\take\lib\php
    * 使用控件上传时,必须要符合控件约定的格式
    * 图片上传接口(临时版本)
    lv1= lv2= type=

    图片fetch 外网转存

    http://{{host}}/api/markdown/fetchpic
    SHA-1: be0020e80e6ada89f704396807011f51006c9120
    * 外网图片fetch时,用 Content-Type 值作为后缀名存储
    SHA-1: dac4ffb14d3292a799ca08fd7dbe9911c102e2ad
    * 图片fetch验证:内网不要获取
    返回绝对地址
    test case
    pic
    https://gss0.bdstatic.com/5bVWsj_p_tVS5dKfpU_Y_D3/res/r/image/2017-09-27/297f5edb1e984613083a2d3cc0c5bb36.png
    https://user-gold-cdn.xitu.io/2019/5/29/16b03fc4381323d1
    webp
    https://user-gold-cdn.xitu.io/2019/5/29/16b03fc4381323d1?imageView2/0/w/1280/h/960/format/webp/ignore-error/1
    301
    http://a.pjkit.my/tools/www_saver/tests/status_code/301.php
    掘金,如果浏览器支持,会返回webp格式
    lv1= lv2= type=

    markdown todo

    markdown to text for 摘要 & es 索引
    双向同步滚动体验不好,可以选择是否同步
    lv1= lv2= type=
    mardown解析:分布式 php
    markdown转纯文本 for es
    客户端 markdown编辑器 
    整理所有的解析器,做一个对比
    markdown sum 
    markdown 转纯文本有问题 

    test cases

    list 后面需要两个换行(使用正则匹配,很难修改),掘金不用,其他都需要,包括github:
    ## test head2
    - test text
    ## test head2
    取消自动编号,现在不能有空格
    a
    b
    c
    d
    http:/abc.com
    lv1= lv2= type=

    editor.md 当前使用;based on marked;已经停止维护

    marked core base 
    在 core 基础上,提供 样式 同步滚动 界面 快捷键 等额外功能,语法高亮用的CodeMirror 
    E:\uninote\mynote\basic\web\link\take -- old
    E:\uninote\mynote-front\static\editor.md
    〖E:\projects\editor.md〗
    http://a.md.my/ -- 包括 CommonMark 测试
     http://a.md.my/examples/index.html  -- test
    online:
    https://github.com/pandao/editor.md
      https://pandao.github.io/editor.md/
      index:
      https://pandao.github.io/editor.md/examples/index.html
      full examples:
      https://pandao.github.io/editor.md/examples/full.html
    mynote-front base on(copy from): 63786e671e2c1a1fd2be25b54a8910cd3bbc7c0a of E:\uninote\mynote-front\static\editor.md
    其中的一个fork
    https://gitlab.com/cobalt-os-team/MeditorJS
    todo:
    --editor: 
    markdown todo 
    lv1= lv2= type=

    markdown test expmt 格式测试

    uninote、掘金
    E:\projects\github-test
     E:\projects\github-test\lc
    E:\uninote\mynote-site-docs\lc
    E:\projects\gogs-test
    editor.md local:
    http://a.md.my/examples/index.html
    markedjs local:
    http://a.mdcore.my/docs/demo/index.html
    phpleague commonMark & HyperDown(思否)
    http://a.md.my/my/index.html
    js commonmark:
    https://github.com/markdown-it/markdown-it
    parsedown
    https://parsedown.org/demo

    parse markdown

    E:\uninote\mynote-front\static\editor.md\src\editormd.js
            /**
             * 解析和保存Markdown代码
             * Parse & Saving Markdown source code
             * 
             * @returns {editormd}     返回editormd的实例对象
             */
            
            save : function() {

    表情 emoji

    https://www.webfx.com/tools/emoji-cheat-sheet/
    掘金禁用、github gogs 启用
    "\ud83e\uddda" emoji 表示方式
    E:\projects\editor.md\examples\emoji.html
    http://a.md.my/examples/emoji.html
    可以配置 emoji 的 hosts

    code ana

    这里加载 marked:
    editormd.loadScript(loadPath + "marked.min", function() {
        editormd.$marked = marked;
            /**
             * 解析和保存Markdown代码
             * Parse & Saving Markdown source code
             * 
             * @returns {editormd}     返回editormd的实例对象
             */
            
            save : function() {
                
                var _this            = this;
                var state            = this.state;
                var settings         = this.settings;
                if (timer === null && !(!settings.watch && state.preview))
                {
                    return this;
                }
                
                var cm               = this.cm;            
                var cmValue          = cm.getValue();
                var previewContainer = this.previewContainer;
                if (settings.mode !== "gfm" && settings.mode !== "markdown") 
                {
                    this.markdownTextarea.val(cmValue);
                    
                    return this;
                }
                
                var marked          = editormd.$marked;
                var markdownToC     = this.markdownToC = [];            
                var rendererOptions = this.markedRendererOptions = {  
                    toc                  : settings.toc,
                    tocm                 : settings.tocm,
                    tocStartLevel        : settings.tocStartLevel,
                    pageBreak            : settings.pageBreak,
                    taskList             : settings.taskList,
                    emoji                : settings.emoji,
                    tex                  : settings.tex,
                    atLink               : settings.atLink,           // for @link
                    emailLink            : settings.emailLink,        // for mail address auto link
                    flowChart            : settings.flowChart,
                    sequenceDiagram      : settings.sequenceDiagram,
                    previewCodeHighlight : settings.previewCodeHighlight,
                };
                
                var markedOptions = this.markedOptions = {
                    renderer    : editormd.markedRenderer(markdownToC, rendererOptions),
                    gfm         : true,
                    tables      : true,
                    breaks      : true,
                    pedantic    : false,
                    sanitize    : (settings.htmlDecode) ? false : true,  // 关闭忽略HTML标签,即开启识别HTML标签,默认为false
                    smartLists  : true,
                    smartypants : true
                };
                
                marked.setOptions(markedOptions);
                        
                var newMarkdownDoc = editormd.$marked(cmValue, markedOptions);
    lv1= lv2= type=

    marked core base

    上万的start,fork 2k+ 还在继续开发
    仅提供 md 转 html,样式不提供;太依赖正则,很难修改。
    〖E:\projects\marked〗
    https://github.com/chjj/marked
    local:
    http://a.mdcore.my/docs/demo/index.html
    查看 lexer 结果:
    online test demo
    https://marked.js.org/demo/

    basic

    <!doctype html>
    <html>
    <head>
      <meta charset="utf-8"/>
      <title>Marked in the b
    rowser</title>
    </head>
    <body>
      <div id="content"></div>
      <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
      <script>
        document.getElementById('content').innerHTML =
          marked('# Marked in browser\n\nRendered by **marked**.');
      </script>
    </body>
    </html>

    heading

    <!doctype html>
    <html>
    <head>
      <meta charset="utf-8"/>
      <title>Marked in the browser</title>
    </head>
    <body>
      <div id="content"></div>
      <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
      <script>
        
          var content = '# Marked in browser\n\n### Install from an Archive File\nRendered by **marked**.';
          const renderer = new marked.Renderer()
          let index = -1
          renderer.heading = function (text, level) {
            return `<h${level} id="titleAnchor-${index++}">${text}</h${level}>`
          }
          document.getElementById('content').innerHTML = marked(content, { renderer: renderer });
      </script>
    </body>
    </html>

    如何实现markdown文章标题导航 双向

    https://www.u3xyz.com/detail/32#titleAnchor-7

    code ana

    语法分析在 worker.js 中:
    Lexer.prototype.token = function(src, top) {
        case 'parse':
          var startTime = new Date();
          var lexed = marked.lexer(e.data.markdown, e.data.options);
          var lexedList = [];
          for (var i = 0; i < lexed.length; i++) {

    demo.html

    官方demo的解析在worker中,不便于调试http://a.mdcore.my/docs/demo/index.html
    可以用此简单版 demo.html

    commits

    使用本地 js,因此选择版本功能失效

    CommonMark compliance

    https://github.com/markedjs/marked/issues/1202
    PR #1160 looks to run Marked against the CommonMark spec test cases: http://spec.commonmark.org/0.28/spec.json
    So far the results show that we are roughly 60% spec-compliant.